package com.wei.czz.framework.admin.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wei.czz.common.dto.admin.role.RoleDto;
import com.wei.czz.common.po.admin.deptRole.DeptRolePagePo;
import com.wei.czz.common.po.admin.userRole.UserRolePo;
import com.wei.czz.common.vo.admin.deptRole.DeptRoleFormVo;
import com.wei.czz.common.vo.admin.role.RoleFormVo;
import com.wei.czz.common.vo.admin.roleGroup.RoleGroupFormVo;
import com.wei.czz.framework.admin.entity.RoleEntity;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2021-03-15 10:28:29
 * className: RoleDao 系统角色操作请求数据库交互接口
 * version: 1.0
 * description:
 */
public interface RoleDao extends BaseMapper<RoleEntity> {

    /**
     * 查询所有角色数据列表
     * @param deleteFlag 角色删除状态
     * @return 系统角色列表
     */
    List<RoleDto> getRoleList(@Param("deleteFlag") Integer deleteFlag);

    /**
     * 获取系统所有角色的角色id
     * @return 角色id列表
     */
    List<String> getRoleIdList();

    /**
     * 分页查询角色列表操作
     * @param page       mp分页对象
     * @param roleIdList 角色id列表
     * @param roleFormVo 角色查询参数对象
     * @return 角色信息列表
     */
    Page<RoleDto> getCacheRoleList(Page<RoleDto> page, @Param("roleIdList") List<String> roleIdList,
                                   @Param("roleFormVo") RoleFormVo roleFormVo);

    /**
     * 查询角色的最大排序等级
     * @param deleteFlag 删除状态
     * @return 最大排序等级
     */
    Integer getMaxSort(@Param("deleteFlag") Integer deleteFlag);

    /**
     * 分页查询部门关联用户
     * @param page mp分页对象
     * @param deptRoleFormVo 表单对象
     * @return 部门关联角色分页数据
     */
    Page<DeptRolePagePo> selectPageList(Page<DeptRolePagePo> page,
                                        @Param("formVo") DeptRoleFormVo deptRoleFormVo);

    /**
     * 分页查询角色授权组关联角色
     * @param page            mp分页对象
     * @param formVo 表单对象
     */
    Page<RoleEntity> selectRoleSpacePageList(Page<RoleEntity> page, @Param("formVo") RoleGroupFormVo formVo);

    /**
     * 查询用户关联角色
     * @param userId       用户主键
     * @param status       状态
     * @param deleteStatus 删除状态
     * @return 角色对象列表
     */
    List<UserRolePo> selectUserRoleList(@Param("userId") Long userId, @Param("status") Integer status,
                                        @Param("deleteStatus") Integer deleteStatus);


}
